package com.xhj.mybatis.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

/**
 * OrderDetail
 *
 * @author XJks
 * @description 订单详情实体类。
 * TODO:由于目前没有实现嵌套映射功能，故该类的所有属性均为简单类型，是 {@link com.xhj.mybatis.entity.Order} 和 {@link com.xhj.mybatis.entity.Customer} 的扁平化结果。
 * TODO:由于新增了二级缓存装饰器类 {@link com.xhj.mybatis.cache.decorators.SerializedCache}，该类在进行序列化和反序列化时，要求实体类必须实现 Serializable 接口，否则会抛出异常。如果不使用二级缓存装饰器类，则不需要实现 Serializable 接口。
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrderDetail implements Serializable {
    /**
     * 订单详情ID
     */
    private Long id;

    /**
     * 订单编号
     */
    private String orderNo;

    /**
     * 客户信息
     */
    private Long customerId;

    /**
     * 客户名称
     */
    private String customerName;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * TODO:ResultMap 配置只使用 {@code <constructor>} 标签来映射关联对象时，需要该构造方法。
     */
    public OrderDetail(Long id, String orderNo, Date createTime, Long customerId, String customerName) {
        this.id = id;
        this.orderNo = orderNo;
        this.createTime = createTime;
        this.customerId = customerId;
        this.customerName = customerName;
    }

    /**
     * TODO:ResultMap 配置既使用 {@code <constructor>} 标签，也使用 {@code <result>} 标签来映射关联对象时，需要该构造方法。
     */
    public OrderDetail(Long id, String orderNo, Date createTime) {
        this.id = id;
        this.orderNo = orderNo;
        this.createTime = createTime;
    }
}
